package 滑动窗口And双指针;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/3/15 15:22
 */
public class zuo绳子盖点数 {


    /*
     题目：
     给你一个 x 轴  点的 集合（假设 有序） nums[], 再 给你一个 绳子的长度 k,请问
     绳子最多盖住的点数是多少 ?
     */


    /*
     滑动窗口的解法:
     O(N)
     */
    public int slideWindow(int nums[],int k){
        int ans = 0,left = 0,right = 0;
        while(right < nums.length){
            if(nums[right] - nums[left] <= k){
                ans = Math.max(ans,++right - left);
            }else {
                while (nums[right] - nums[left] > k){
                    left++;
                }
            }
        }
        return ans;
    }


    /*
     枚举 右端点, 然后进行二分!
     O(N * lgN)
     */
    public int binarySearch(int nums[],int k){
        int right = 0,ans = 0;
        for(;right < nums.length;right++){
            int left = nums[right] - k; // 根据右端点, 算出左端点, 然后进行二分
            ans = Math.max(ans,right + 1 - binarySearchAns(nums,left));
        }
        return ans;
    }

    // find  >=  aim  leftest
    private int binarySearchAns(int[] nums, int aim) {
        int left = 0, right = nums.length - 1;
        while(left < right){
            int mid = left + right >> 1;
            if(nums[mid] < aim){
                left = mid + 1;
            }
            else{
                right = mid;
            }
        }
        return left;
    }


    public static void main(String[] args) {
        System.out.println(-4 >> 1);
        System.out.println(1 << -4);
        System.out.println(Integer.toBinaryString(-4));
        System.out.println(Integer.toBinaryString(-1));
    }
}
